FROM openjdk:17.0.1-jdk-oracle
ARG jar_file

#WORKDIR 设置工作目录
WORKDIR /root

COPY ${jar_file} app.jar

#ENV 用于在构建过程中以及之后的容器运行期间设置环境变量。
#RUN 用于在构建镜像的过程中执行命令。
RUN mkdir logs && mkdir conf
COPY target/classes/my.properties conf/my.properties
COPY target/classes/application.yml conf/application.yml

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' > /etc/timezone

#VOLUME 用于指定持久化目录（即指定此目录可以被挂载出去）
VOLUME ["/root/logs", "/root/conf"]
EXPOSE 8080

ENV JAVA_OPTS="-Xms512m -Xmx1024m"
ENV CONF_OPTS="-Djava.security.egd=file:/dev/./urandom -Dspring.config.location=file:/root/conf/application.yml -Dlogging.file.path=/root/logs"
#ENTYRYPOINT 可以用来当作启动容器时执行的命令，与CMD不同的是，ENTRYPOINT命令始终会被使用
#CMD指令用于指定容器启动时执行的命令及参数。CMD命令也常用来给ENTRYPOINT命令提供参数。
#如果用户在 docker run命令中指定了命令，则 CMD设置的命令会被覆盖。CMD可以被看作是容器的默认启动行为，但易于被覆盖，适合提供默认值或默认行为。

# 使用 ENTRYPOINT + CMD 组合，并确保参数正确传递
ENTRYPOINT ["sh", "-c", "exec java $JAVA_OPTS $CONF_OPTS -jar app.jar $CMD_PARAMS"]
CMD []
